home *** CD-ROM | disk | FTP | other *** search
- //------------------------------------------------------------------------------
- // File: $$CLASS_NAME$$.h
- //
- // Desc: Audio Effect DMO Wizard generated code - Definition of $$CLASS_NAME$$
- //
- // Author: $$DSDMO_AUTHOR$$
- //
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //------------------------------------------------------------------------------
-
- /////////////////////////////////////////////////////////////////////////////
- // TODO List:
- $$IF(SUPPORT_DS_IMEDPARAM || SUPPORT_DS_DMP)
- // - Add the DMO parameters to the $$DSDMOID_NAME$$FilterParams enumeration
- // - Provide information about the DMO parameters in the g_params array
- $$ENDIF
- // - Add member variables / functions
- //
- /////////////////////////////////////////////////////////////////////////////
-
- #ifndef __$$CLASS_NAME$$_H_
- #define __$$CLASS_NAME$$_H_
-
- #include "resource.h"
- #include <uuids.h>
-
- #include "$$DLL_NAME$$.h"
-
- $$IF(SUPPORT_DS_IMEDPARAM || SUPPORT_DS_DMP)
- ///////////////////////////////////////////////////////////////////////////////
- // Parameter Info
- //
- const MP_CAPS g_capsAll = MP_CAPS_CURVE_JUMP | MP_CAPS_CURVE_LINEAR | MP_CAPS_CURVE_SQUARE | MP_CAPS_CURVE_INVSQUARE | MP_CAPS_CURVE_SINE;
-
- // TODO: Add the DMO parameters to the enumeration
- enum $$DSDMOID_NAME$$FilterParams
- {
- $$IF(EMPTY_DSDMO)
- $$DSDMO_DEFINE$$_PARAM1 = 0, // NOTE: $$DSDMO_DEFINE$$_PARAM1 is provided as an example
- $$ELSE // Sample DMO
- PANNER_FREQ = 0,
- PANNER_WIDTH,
- $$ENDIF
- };
-
- ///////////////////////////////////////////////////////////////////////////////
- // The ParamInfo struct is defined as:
- // typedef struct _ParamInfo
- // {
- // DWORD dwIndex; // Index for the parameter
- // MP_PARAMINFO MParamInfo; // Parameter info
- // WCHAR * pwchText; // Text name for the parameter
- // } ParamInfo;
- ///////////////////////////////////////////////////////////////////////////////
- // TODO: Provide information about the DMO parameters
- static ParamInfo g_params[] =
- {
- // index type caps min, max, neutral, unit text, label, parameter name
- $$IF(EMPTY_DSDMO)
- $$DSDMO_DEFINE$$_PARAM1,MPT_INT, g_capsAll, 0, 100, 0, L"units", L"Param1", L"Param1",
- $$ELSE // Sample DMO
- PANNER_FREQ, MPT_FLOAT, g_capsAll, 0.1f, 20, 6.5f, L"Hz", L"LFO", L"LFO",
- PANNER_WIDTH, MPT_FLOAT, g_capsAll, 0, 1, 0.8f, L"x", L"Width", L"Width",
- $$ENDIF
- };
- ///////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////
- $$ENDIF
-
- $$IF(!EMPTY_DSDMO) // Sample DMO
- // Sine wave table used for panning modulation
- // (Quarter cycle of a sine wave)
- const float SINE[] = {
- // Resolution = 90
- 0.000001f,0.017452f,0.034899f,0.052336f,0.069756f,0.087156f,0.104528f,0.121869f,0.139173f,0.156434f,
- 0.173648f,0.190809f,0.207912f,0.224951f,0.241922f,0.258819f,0.275637f,0.292372f,0.309017f,0.325568f,
- 0.342020f,0.358368f,0.374607f,0.390731f,0.406737f,0.422618f,0.438371f,0.453991f,0.469472f,0.484810f,
- 0.500000f,0.515038f,0.529919f,0.544639f,0.559193f,0.573576f,0.587785f,0.601815f,0.615661f,0.629320f,
- 0.642788f,0.656059f,0.669131f,0.681998f,0.694658f,0.707107f,0.719340f,0.731354f,0.743145f,0.754710f,
- 0.766044f,0.777146f,0.788011f,0.798636f,0.809017f,0.819152f,0.829038f,0.838671f,0.848048f,0.857167f,
- 0.866025f,0.874620f,0.882948f,0.891007f,0.898794f,0.906308f,0.913545f,0.920505f,0.927184f,0.933580f,
- 0.939693f,0.945519f,0.951057f,0.956305f,0.961262f,0.965926f,0.970296f,0.974370f,0.978148f,0.981627f,
- 0.984808f,0.987688f,0.990268f,0.992546f,0.994522f,0.996195f,0.997564f,0.998630f,0.999391f,0.999848f,
- };
- const int SINE_TABLE_SIZE = sizeof(SINE) / sizeof(double);
- $$ENDIF
-
- /////////////////////////////////////////////////////////////////////////////
- // $$CLASS_NAME$$
- class ATL_NO_VTABLE $$CLASS_NAME$$ :
- public CComObjectRootEx<CComMultiThreadModel>,
- public CComCoClass<$$CLASS_NAME$$, &CLSID_$$DSDMO_DEFINE$$>,
- public IMediaObjectImpl<$$CLASS_NAME$$,1,1>, // DMO Template (1 input stream & 1 output stream)
- public IMediaObjectInPlace,
- $$IF(SUPPORT_DS_IMEDPARAM || SUPPORT_DS_DMP)
- public CParamsManager,
- public CParamsManager::UpdateCallback,
- public IPersistStream,
- $$ENDIF
- $$IF(SUPPORT_DS_DMP)
- public ISpecifyPropertyPages,
- $$ENDIF
- public $$INTERFACE_NAME$$
- {
- friend class IMediaObjectImpl<$$CLASS_NAME$$,1,1>;
- friend class LockIt;
-
- public:
- $$CLASS_NAME$$(); // Constructor
- ~$$CLASS_NAME$$(); // Destructor
-
- DECLARE_REGISTRY_RESOURCEID(IDR_$$DSDMO_DEFINE$$)
- DECLARE_GET_CONTROLLING_UNKNOWN()
-
- DECLARE_PROTECT_FINAL_CONSTRUCT()
-
- BEGIN_COM_MAP($$CLASS_NAME$$)
- COM_INTERFACE_ENTRY_IID(IID_IMediaObject, IMediaObject)
- COM_INTERFACE_ENTRY(IMediaObjectInPlace)
- $$IF(SUPPORT_DS_IMEDPARAM || SUPPORT_DS_DMP)
- COM_INTERFACE_ENTRY(IMediaParams)
- COM_INTERFACE_ENTRY(IMediaParamInfo)
- COM_INTERFACE_ENTRY(IPersistStream)
- $$ENDIF
- $$IF(SUPPORT_DS_DMP)
- COM_INTERFACE_ENTRY(ISpecifyPropertyPages)
- $$ENDIF
- COM_INTERFACE_ENTRY_IID(IID_$$INTERFACE_NAME$$, $$INTERFACE_NAME$$)
- COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p)
- END_COM_MAP()
-
- HRESULT FinalConstruct()
- {
- return CoCreateFreeThreadedMarshaler(
- GetControllingUnknown(), &m_pUnkMarshaler.p);
- }
-
- void FinalRelease()
- {
- FreeStreamingResources(); // In case client does not call this.
- m_pUnkMarshaler.Release();
- }
-
- CComPtr<IUnknown> m_pUnkMarshaler;
-
- public:
- // IMediaObjectInPlace Methods
- STDMETHODIMP STDMETHODCALLTYPE Process(ULONG ulSize, BYTE *pData, REFERENCE_TIME refTimeStart,DWORD dwFlags);
- STDMETHODIMP STDMETHODCALLTYPE Clone(IMediaObjectInPlace **ppMediaObject);
- STDMETHODIMP STDMETHODCALLTYPE GetLatency(REFERENCE_TIME *pLatencyTime);
-
- $$IF(SUPPORT_DS_IMEDPARAM || SUPPORT_DS_DMP)
- // SetParam handling
- STDMETHODIMP SetParam(DWORD dwParamIndex,MP_DATA value) { return SetParamInternal(dwParamIndex, value, false); }
- HRESULT SetParamUpdate(DWORD dwParamIndex, MP_DATA value) { return SetParamInternal(dwParamIndex, value, true); }
- HRESULT SetParamInternal(DWORD dwParamIndex, MP_DATA value, bool fSkipPasssingToParamManager);
-
- // IPersist Methods
- STDMETHODIMP STDMETHODCALLTYPE GetClassID(CLSID* pClassID);
-
- // IPersistStream Methods
- STDMETHODIMP STDMETHODCALLTYPE IsDirty();
- STDMETHODIMP STDMETHODCALLTYPE Load(IStream* pStream);
- STDMETHODIMP STDMETHODCALLTYPE Save(IStream* pStream, BOOL fClearDirty);
- STDMETHODIMP STDMETHODCALLTYPE GetSizeMax(ULARGE_INTEGER* pcbSize);
- $$ENDIF
-
- $$IF(SUPPORT_DS_DMP)
- // ISpecifyPropertyPages Methods
- STDMETHODIMP GetPages(CAUUID *pPages);
- $$ENDIF
-
- // $$INTERFACE_NAME$$ Methods
- $$IF(SUPPORT_DS_IMEDPARAM || SUPPORT_DS_DMP)
- STDMETHOD(SetAllParameters) (THIS_ LPC$$DSDMOID_NAME$$Params pParm);
- STDMETHOD(GetAllParameters) (THIS_ LP$$DSDMOID_NAME$$Params pParm);
- $$ENDIF
- // TODO: Add your custom interface methods here
-
- private:
- //IMediaObjectImpl Methods
- STDMETHODIMP InternalAllocateStreamingResources(void);
- STDMETHODIMP InternalDiscontinuity(DWORD dwInputStreamIndex);
- STDMETHODIMP InternalFlush(void);
- STDMETHODIMP InternalFreeStreamingResources(void);
- STDMETHODIMP InternalGetInputMaxLatency(DWORD dwInputStreamIndex, REFERENCE_TIME *prtMaxLatency);
- STDMETHODIMP InternalSetInputMaxLatency(DWORD dwInputStreamIndex, REFERENCE_TIME rtMaxLatency);
- STDMETHODIMP InternalGetInputSizeInfo(DWORD dwInputStreamIndex, DWORD *pcbSize, DWORD *pcbMaxLookahead, DWORD *pcbAlignment);
- STDMETHODIMP InternalGetOutputSizeInfo(DWORD dwOutputStreamIndex, DWORD *pcbSize, DWORD *pcbAlignment);
- STDMETHODIMP InternalGetInputStreamInfo(DWORD dwInputStreamIndex, DWORD *pdwFlags);
- STDMETHODIMP InternalGetOutputStreamInfo(DWORD dwOutputStreamIndex, DWORD *pdwFlags);
- STDMETHODIMP InternalGetInputType(DWORD dwInputStreamIndex, DWORD dwTypeIndex, DMO_MEDIA_TYPE *pmt);
- STDMETHODIMP InternalGetOutputType(DWORD dwOutputStreamIndex, DWORD dwTypeIndex, DMO_MEDIA_TYPE *pmt);
- STDMETHODIMP InternalProcessInput(DWORD dwInputStreamIndex, IMediaBuffer *pBuffer, DWORD dwFlags, REFERENCE_TIME rtTimestamp, REFERENCE_TIME rtTimelength);
- STDMETHODIMP InternalProcessOutput(DWORD dwFlags, DWORD cOutputBufferCount, DMO_OUTPUT_DATA_BUFFER *pOutputBuffers, DWORD *pdwStatus);
-
- // IMediaObjectImpl Required overides
- STDMETHODIMP InternalAcceptingInput(DWORD dwInputStreamIndex);
- STDMETHODIMP InternalCheckInputType(DWORD dwInputStreamIndex, const DMO_MEDIA_TYPE *pmt);
- STDMETHODIMP InternalCheckOutputType(DWORD dwOutputStreamIndex, const DMO_MEDIA_TYPE *pmt);
- void Lock(void);
- void Unlock(void);
-
- // Private functions
- HRESULT UpdateStatesInternal();
-
- HRESULT DoProcess(BYTE *pbData, const BYTE *pbInputData, DWORD dwQuanta);
-
- WAVEFORMATEX* WaveFormat()
- {
- _ASSERTE(InputType(0)->formattype == FORMAT_WaveFormatEx);
- return reinterpret_cast<WAVEFORMATEX*>(InputType(0)->pbFormat);
- }
-
- $$IF(!EMPTY_DSDMO) // Sample DMO
- // Private functions
- template<class SampleType> __forceinline void DoOneSample(SampleType *l, SampleType *r);
- $$ENDIF
-
- // States of the DMO
- bool m_fDirty;
- bool m_fInitialized;
-
- // States of the input type
- WORD m_nChannels;
- WORD m_wBitsPerSample;
- DWORD m_nSamplesPerSec;
-
- CComPtr<IMediaBuffer> m_pBuffer; // Pointer to the input buffer
- BYTE *m_pbInputData; // Pointer to the data in the input buffer
- DWORD m_cbInputLength; // Length of the data
- REFERENCE_TIME m_rtTimestamp; // Most recent timestamp
- bool m_bValidTime; // Controls whether timestamp is valid or not
-
- $$IF(EMPTY_DSDMO)
- // TODO: Declare member variables here
- DWORD m_dwParam1;
- $$ELSE // Sample DMO
- // States used by $$DSDMOID_NAME$$
- float m_fFreq;
- float m_fWidth;
-
- ULONG m_ulPeriod;
- float m_fSineTablePeriod;
- ULONG m_ulPhase;
- $$ENDIF
-
- };
-
- #endif //__$$CLASS_NAME$$_H_
-
-